package main

import (
	"fmt"
	"io"
	message "learningProject/shangguigu/common"
	"learningProject/shangguigu/server/processes"
	"learningProject/shangguigu/server/utils"
	"net"
)

type Processor struct {
	Conn net.Conn
}

// 根据客户端发送的不同消息类型来确定调用哪个函数处理
func (this *Processor) serverProcessMes(mes *message.Message) (err error) {
	// 看看是否能接受到客户端聊天信息
	fmt.Println("mes = ", mes)
	switch mes.Type {
	case message.LoginMesType:
		// 处理登录
		// 创建UesrProcess实例
		up := &processes.UserProcess{
			Conn: this.Conn,
		}
		err = up.ServerProcessLogin(mes)
	case message.RegisterMegType:
		// 处理注册
		up := &processes.UserProcess{
			Conn: this.Conn,
		}
		err = up.ServerProcessRegister(mes)
	case message.SmsMesType:
		smsProcess := &processes.SmsProcess{}
		smsProcess.SendGroupMes(mes)
	default:
		fmt.Println("message type error")
	}
	return
}

func (this *Processor) process2() (err error) {
	//读客户端发送的信息
	for {
		// 创建Transfer实例
		tf := &utils.Transfer{
			Conn: this.Conn, // 将UserProcess结构体的Conn赋给utils包下的Transfer结构体
		}
		mes, err := tf.ReadPkg()
		if err != nil {
			if err == io.EOF {
				fmt.Println("客户端退出，服务器也要退出")
				return err
			} else {
				fmt.Println("readPkg err = ", err)
				return err
			}
		}

		err = this.serverProcessMes(&mes) // serverProcessMes是同一个包下的，可以小写
		if err != nil {
			fmt.Println("serverProcessMes err = ", err)
			return err
		}
		fmt.Println("mes = ", mes)
	}

}
